# 1、闭包捕获变量只读直接访问
def foo():
    x = 1
    def bar():
        print(x)
    return bar
f1 =foo()
f1()
# 2、闭包捕获变量且修改，需要使用nonlocal声明
def gkd():
    y = 1
    def bar():
        # 对外层变量赋值，由于Python解释器会把x当作函数fn()的局部变量，它会报错：
        # nonlocal 关键字只能用于嵌套函数中，用于声明变量来自外层的非全局作用域。
        nonlocal y
        y+=1
        print(y)
    return bar
g1 =gkd()
g1()

# global 作用于全局（模块级）变量。
# nonlocal 作用于嵌套函数的外层局部变量（非全局）。